package com.dayaokeji.server_api.api;

import com.dayaokeji.server_api.Page;
import com.dayaokeji.server_api.ServerResponse;
import com.dayaokeji.server_api.domain.AddCourse;
import com.dayaokeji.server_api.domain.Course;
import com.dayaokeji.server_api.domain.CourseSign;
import com.dayaokeji.server_api.domain.DeleteCourse;
import com.dayaokeji.server_api.domain.DeleteMember;
import com.dayaokeji.server_api.domain.InteractiveCollect;
import com.dayaokeji.server_api.domain.Member;
import com.dayaokeji.server_api.domain.SignResult;
import com.dayaokeji.server_api.domain.Term;
import com.dayaokeji.server_api.domain.UpdateSeat;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * Created by Gorden on 2017/10/14.
 * 课程相关API
 */

public interface CourseApi {

    /**
     *
     * @param start
     * @param studentId
     * @param type
     * @param startTime
     * @param actEndTime
     * @param length
     * @param universityId
     * @param courseType courseType=1为周期，2为临时
     * @return
     */
    @GET("course/course/select")
    Call<ServerResponse<Page<Course>>> list(
            @Query("studentId") String studentId,
            @Query("type") int type,
            @Query("actStartTime") String startTime,
            @Query("actEndTime") String actEndTime,
            @Query("universityId") long universityId,
            @Query("courseType") int courseType,
            @Query("start") int start,
            @Query("length") int length
    );

    /**
     *
     * @param start
     * @param studentId
     * @param type
     * @param startTime
     * @param length
     * @param universityId
     * @return
     */
    @GET("course/course/select")
    Call<ServerResponse<Page<Course>>> newCourseList(
            @Query("studentId") String studentId,
            @Query("type") int type,
            @Query("actStartTime") String startTime,
            @Query("universityId") long universityId,
            @Query("start") int start,
            @Query("length") int length
    );

    /**
     *
     * @param start
     * @param studentId
     * @param length
     * @param universityId
     * @return
     */
    @GET("course/course/select")
    Call<ServerResponse<Page<Course>>> findCourseById(
            @Query("type") int type,
            @Query("studentId") String studentId,
            @Query("universityId") long universityId,
            @Query("courseDetailId") int courseId,
            @Query("start") int start,
            @Query("length") int length
    );

    /**
     *查询课程历史-时间查询
     * @param teacherId
     * @param type
     * @param universityId
     * @param courseType courseType=1为周期，2为临时
     * @param start
     * @param length
     * @return
     */
    @GET("course/course/select")
    Call<ServerResponse<Page<Course>>> history(
            @Query("studentId") String teacherId,
            @Query("type") int type,
            @Query("universityId") long universityId,
            @Query("courseType") int courseType,
            @Query("start") int start,
            @Query("length") int length
    );


    /**
     * 查询课程历史-关键字查询
     * @param universityId
     * @param type
     * @param courseType courseType=1为周期，2为临时
     * @param keywords
     * @param start
     * @param length
     * @return
     */
    @GET("course/course/select")
    Call<ServerResponse<Page<Course>>> queryKeyword(
            @Query("studentId") String studentId,
            @Query("universityId") Long universityId,
            @Query("type") int type,
            @Query("courseType") int courseType,
            @Query("keywords") String keywords,
            @Query("start") int start,
            @Query("length") int length
    );

    /**
     * 查询课程历史-关键字查询
     * @param universityId
     * @param type
     * @param courseType courseType=1为周期，2为临时
     * @param keywords
     * @param start
     * @param length
     * @return
     */
    @GET("course/course/select")
    Call<ServerResponse<Page<Course>>> queryId(
            @Query("universityId") Long universityId,
            @Query("type") int type,
            @Query("courseType") int courseType,
            @Query("courseId") String keywords,
            @Query("start") int start,
            @Query("length") int length
    );


    /**
     * 删除课程
     * @param deleteCourse
     * @return
     */
    @POST("course/course/delete")
    Call<ServerResponse<Void>> delete(@Body DeleteCourse deleteCourse);

    /**
     * 查询课程成员信息
     * @param courseDetailId
     * @return
     */
    @GET("course/course/member")
    Call<ServerResponse<List<Member>>> member(@Query("courseDetailId") int courseDetailId);

    /**
     * 查询课程成员信息
     * @param courseDetailId
     * @return
     */
    @GET("course/course/member")
    Call<ServerResponse<List<Member>>> members(@Query("courseDetailId") int courseDetailId , @Query("studentId") String studentId);

    /**
     * 课程签到
     * @param courseSign
     * @return
     */
    @POST("course/course/sign")
    Call<ServerResponse<SignResult>> sign(@Body CourseSign courseSign);

    /**
     * 加入课程
     * @param addCourse
     * @return
     */
    @POST("course/course/addMember")
    Call<ServerResponse<Void>> addMember(@Body AddCourse addCourse);

    /**
     * 查看座次空位情况
     * @return
     */
    @GET("course/course/getRoomSeat")
    Call<ServerResponse<String>> getRoomSeat(
            @Query("courseDetailId") Integer courseDetailId);

    /**
     * 更新座位
     * @param updateSeat
     * @return
     */
    @POST("course/course/updateSeat")
    Call<ServerResponse<Void>> updateSeat(@Body UpdateSeat updateSeat);

    /**
     * 课程互动统计收集
     * @param interactiveCollect
     * @return
     */
    @POST("course/course/collect")
    Call<ServerResponse<Integer>> collect(@Body InteractiveCollect interactiveCollect);

    /**
     * 根据ID获取课程详情
     * @param courseId
     * @return
     */
    @GET("course/course/selectCourseById")
    Call<ServerResponse<Course>> findCourseById(@Query("id") int courseId);

    /**
     * 删除课堂成员
     * @return
     */
    @POST("course/course/deleteMember")
    Call<ServerResponse<Void>> deleteMember(@Body DeleteMember deleteMember);

    /**
     * 获取全部学期
     * @return
     */
    @GET("course/course/termList")
    Call<ServerResponse<List<Term>>> terms();
}
